module.exports = Behavior({
    lifetimes: {
      created() {
        this._originalSetData = this.setData // 原始 setData
        this.setData = this._setData // 封装后的 setData
      }
    },
    definitionFilter(defFields) {
      const computed = defFields.computed || {}
      const computedKeys = Object.keys(computed)
      const computedCache = {}
   
      // 计算 computed
      const calcComputed = (scope, insertToData) => {
        const needUpdate = {}
        const data = defFields.data = defFields.data || {}
   
        for (let key of computedKeys) {
          const value = computed[key].call(scope) // 计算新值
          if (computedCache[key] !== value) needUpdate[key] = computedCache[key] = value
          if (insertToData) data[key] = needUpdate[key] // 直接插入到 data 中，初始化时才需要的操作
        }
   
        return needUpdate
      }
   
      // 重写 setData 方法
      defFields.methods = defFields.methods || {}
      defFields.methods._setData = function (data, callback) {
        const originalSetData = this._originalSetData // 原始 setData
        originalSetData.call(this, data, callback) // 做 data 的 setData
        const needUpdate = calcComputed(this) // 计算 computed
        originalSetData.call(this, needUpdate) // 做 computed 的 setData
      }
   
      // 初始化 computed
      calcComputed(defFields, true) // 计算 computed
    }
  })